SVN_Lernvideo
Arbeiten mit Branches / Tags
Branches
Im unterschied zu manch anderen Versionskontrollsystemen sind Branches und Tags in Subversion zunächst einmal nicht mehr als gewöhnliche Verzeichnisse. Subversion speichert zu jeder Datei und jedem Verzeichnis zusätzliche Metainformationen, die informationen über aktuelle Version, Änderungsdatum und so weiter enthalten.
Durch diese einfache Struktur lässt sich Subversion auch Programmierneulingen einfach und schnell erlernen. Diese Struktur hat jedoch auch ihre Tücken, etwa wenn man versucht, einen Branch vom Root des Repositories zu erstellen. Da ein Branch ja ein Unterverzeichnis vom Wurzelverzeichnis ist (also etwa branches/neuerbranch), würde er auch alle anderen Branches (branches/*), inklusive sich selbst enthalten.
Wenn man in Subversion einen neuen Branch anlegt, ist dies also zunächst einmal nicht mehr als eine Kopie eines vorhandenen Verzeichnisses (=alten Branches).
Branch erstellen
Die einfachste und eleganteste Möglichkeit einen Branch zu erstellen
ist, mit dem SVN Kommandozeilentool den Server anzuweisen dies zu
erledigen.
Um auf einen Branch zugreifen zu können, muss man in Subversion praktischerweise nicht mit Kommandozeilenparametern hantieren. Stattdessen kann der Zugreif auf ein Verzeichnis im Repository über den HTTP Authentifizierungsmechanismus des Web Servers realisiert werden.
$ svn copy https://svn.mni.fh-giessen.de/eStudy/branches/ecom \
https://svn.mni.fh-giessen.de/eStudy/branches/ecom2000 \
- m "Branch von ecom erstellt."
Committed revision 1241.
In diesem Beispiel haben wir den Server angewiesen einen neuen Branch namens ecom2000 als Kopie vom Branch ecom zu erstellen. Der neu angelegte Branch kann anschkießend ausgecheckt und verwendet werden (siehe Kapitel Checkout).
Es gibt noch eine weitere Möglichkeite einen neuen Branch annzulegen, indem man sich zunächst eine lokale Kopie des alten Branches auf dem Rechner anlegt. Im 2. Beispiel wird eine lokale Kopie des Branches ecom im lokalen Verzeichnis ecom2000 erstellt, bevor der Branch Serverseitig erstellt wird. Das Verzeichnis wird dabei automatisch angelegt, falls es noch nicht vorhanden sein sollte:
$ svn checkout https://svn.mni.fh-giessen.de/eStudy/branches/ecom ecom2000
A ecom2000/VerzeichnisX/
A com2000/DateiY.z
A ecom2000/...
Checked out revision 340.
Erst jetzt wird der eigentliche Branch auf dem Server erstellt:
svn copy branches/ecom branches/ecom2000Anschließend muss noch ein Commit ausgeführt werden, um die Änderungen zu bestätigen:
cd ecom2000
svn status
A + branches/ecom2000
$ svn commit -m "Erzeuge Branch ecom2000 von branches/ecom"
Adding branches/ecom2000
Committed revision 341.
Wie unschwer zu erkennen ist, ist die zweite Variante umständlicher.
Diese Vorgehensweise hat außerdem einen weiteren Nachteil, wenn man in
einem Projekt mit mehreren Beteiligten und unterschiedlichen
Entwicklungsumgebungen arbeitet. Dadurch das zunächst eine lokale
Arbeitskopie des Ursprünglichen Branches geholt wird, ergibt sich die
Gefahr, dass noch vor dem Anlegen des neuen Branches Dateien geändert
wurden. Das kann beispielsweise dann passieren, wenn in der
Entwicklungsumgebung eine unterschiedliche Textkodierung eingestellt
wurde. Die elegantere und bessere Möglichkeit ist daher, wie im 1.
Beispiel vorzugehen und erst nach dem Anlegen des Repositories einen
frischen Checkout des neuen Repositories zu machen.
Authentifizierung